//方法：出现的方向

export default class Snake {
    constructor(map) {
        this.map = map
        //蛇
        this.snake = []
        //方向
        this.direction = 'right'
        //初始化的时候，把蛇设置好
        this.creSnake()
    }

    //计算蛇头出现在哪一个位置
    post() {
        //只负责计算位置，不进行赋值
        //判断原先有个头，根据方向判断
        //原先没有头，直接出现在0 0 位置
        const head = this.snake[0]
        //没有头，直接在 0 0 
        if (!head) { return { left: 0, top: 0 } }
        // 有头，根据方向来计算
        const obj = { left: head.offsetLeft, top: head.offsetTop }
        switch (this.direction) {
            case 'top': obj.top -= 25; break
            case 'left': obj.left -= 25; break
            case 'right': obj.left += 25; break
            case 'bottom': obj.top += 25; break
        }
        return obj
    }
    //2.给蛇加头
    creHead() {
        //拿坐标
        const post = this.post()
        //判断原是不是有头，
        const head = this.snake[0]
        if (head) head.className = 'body'
        //现在里面没头
        const div = document.createElement('div')
        div.className = 'head'
        div.style.left = post.left + 'px'
        div.style.top = post.top + 'px'
        this.snake.unshift(div)
        this.map.appendChild(div)
    }
    //3.初始化蛇
    creSnake() {
        //默认初始化三节
        for (let i = 0; i < 3; i++) {
            this.creHead()
        }
    }
    //4.蛇动起来
    move() {
        //pop() 删除数组最后一个
        //返回值：被删除的这个东西
        const body = this.snake.pop()
        // 把这一节从页面移出
        body.remove()

        //加头
        this.creHead()
    }
    //5.判断是否死亡
    isDie() {
        //拿到目前蛇头的坐标
        const head = this.snake[0]
        const x = head.offsetLeft
        const y = head.offsetTop
        //判断
        if (x < 0 || y < 0 || x >= this.map.clientWidth || y >= this.map.clientHeight) {
            return true
        } else {
            //循环遍历数组   看看是不是和某一个body 的坐标重合
            const tmp = this.snake.slice(1)
            let flag = false
            tmp.forEach(item => {
                if (x === item.offsetLeft && y === item.offsetTop) {
                    flag = true
                }
            })
            return flag
        }
    }
    //6.判断吃到食物
    isEat(food){
        const x = this.snake[0].offsetLeft
        const y = this.snake[0].offsetTop
        if(x===food.x && y===food.y){
            return true
        }else{
            return false
        }

    }
}